<?php
// Capsule：WHMCS 用来处理数据库操作的类。
use WHMCS\Database\Capsule;
// AdminDispatcher：一个处理后台管理操作的类（虽然在这段代码中没有使用，可能是其他地方的使用）。
use WHMCS\Module\Addon\TestMo\Admin\AdminDispatcher;
// ClientDispatcher：处理前端客户区请求的调度类。
use WHMCS\Module\Addon\TestMo\Client\ClientDispatcher;

// 常量 WHMCS 没有定义，则 die() 函数会终止脚本的执行，并输出 "This file cannot be accessed directly" 的错误信息。这是为了防止该文件被直接访问，
// 确保该文件只能通过 WHMCS 框架内的正常流程被引用。
if (!defined("WHMCS")) {
    die("This file cannot be accessed directly");
}


// XXXXX_config()：这是一个 WHMCS 模块的配置函数，返回该插件的一些基本信息，包括：
// name：模块的名称。
// description：模块的描述，会在 WHMCS 管理后台显示。
// author：插件作者的名字。
// language：模块的默认语言，这里设置为英文。
// version：插件的版本号。
// 这些信息会在 WHMCS 后台插件管理界面显示，帮助管理员了解模块的基本信息。
function testmo_config()
{
    return [
        'name' => '测试插件模板页面使用',
        'description' => '测试插件模板页面使用',
        'author' => '测试人员',
        'language' => 'english',
        'version' => '1.0',
        ];
}


// XXXXX_clientarea($vars)：这是 WHMCS 客户区页面处理的核心函数
// $vars 是一个数组，包含了客户区页面需要的一些数据，如模块链接、模块版本、当前语言等。

function testmo_clientarea($vars)
{
    // 获取参数：
    // $modulelink：模块链接，通常用来生成指向插件页面的 URL。
    // $version：模块版本，来自 $vars 中的 version。
    // $_lang：当前语言的代码，来自 $vars 中的 _lang。

    $modulelink = $vars['modulelink']; 
    $version = $vars['version']; 
    $_lang = $vars['_lang']; 

    // 获取 action 参数：
    // 通过 $_REQUEST['action'] 获取前端请求中 action 参数的值，决定要执行的操作。
    // 如果没有提供 action 参数，则默认为空字符串。
    $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
    
    // 实例化 ClientDispatcher：
    // 创建一个 ClientDispatcher 类的实例，用来处理客户端的请求。
    // 调用 dispatch() 方法，传入 action 和 vars 参数，决定具体要执行的逻辑。
    // dispatch() 会根据传入的 action 调度到相应的客户端控制器方法。
    $dispatcher = new ClientDispatcher();
    return $dispatcher->dispatch($action, $vars);
}
